package com.ydlclass.serialize;

import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * @Author duWenJian
 * @Date 2023/11/3 10:33
 * @Version 1.0
 */
@Slf4j
public class SerializeUtil {
    public static byte[] serialize(Object obj){
        // todo 针对不同的消息类型进行不同的处理  比如: 心跳的请求
        if (obj == null){
            return null;
        }
        // 我们可以希望通过一些设计模式，面向对象编程，让我们可以配置修改序列化和压缩工具
        // 对象怎么变成字节数组  序列化和压缩的内容
        // jdk自带的序列化工具  序列化必须实现Serializable接口
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream outputStream  = new ObjectOutputStream(baos);
            outputStream.writeObject(obj);
            // 压缩
            return  baos.toByteArray();
        } catch (IOException e) {
            log.error("序列化时出现异常{}",e);
            throw new RuntimeException(e);
        }
    }
}
